home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2004 April / Gamestar_61_2004-04_dvdb.iso / DVDStar / Editace / hltp.exe / {app} / Applications / QuArK / plugins / deckerutils.py < prev    next >
Text File  |  2004-01-05  |  5KB  |  146 lines

  1. """ QuArK  -  Quake Army Knife
  2.  
  3.   Utility functions by Decker@post1.tele.dk
  4. """
  5. # Copyright (C) 1996-99 Armin Rigo
  6. # THIS FILE IS PROTECTED BY THE GNU GENERAL PUBLIC LICENCE
  7. # FOUND IN FILE "COPYING.TXT"
  8. #
  9. #$Header: /cvsroot/quark/runtime/plugins/deckerutils.py,v 1.6 2001/01/06 18:33:52 decker_dk Exp $
  10. #
  11.  
  12. import quarkx
  13. import quarkpy.mapentities
  14. ObjectOrigin = quarkpy.mapentities.ObjectOrigin
  15.  
  16. def FindOriginTexPolyPos(entity):
  17.     "Find origin by searching for poly under entity which has the ORIGIN texture"
  18.     subpolys = entity.findallsubitems("", ":p", ":g")
  19.     for i in subpolys:
  20.         subfaces = i.findallsubitems("",":f",":g");
  21.         # Make sure that all faces on poly contains the ORIGIN texture
  22.         foundoriginpoly=1
  23.         for j in subfaces:
  24.             if not j["tex"]=="ORIGIN": # If just one face does not contain the ORIGIN texture, its not an origin-poly
  25.                 foundoriginpoly=0
  26.                 break
  27.         if foundoriginpoly==1:
  28.             return ObjectOrigin(i) # give me the origin of the poly
  29.     return None
  30.  
  31. def FindOriginFlagPolyPos(entity):
  32.     "Find origin by searching for poly under entity which has the Origin-texture-flag set"
  33.     subpolys = entity.findallsubitems("", ":p", ":g")
  34.     for i in subpolys:
  35.         subfaces = i.findallsubitems("",":f",":g");
  36.         # Make sure that all faces on poly contains the Origin-texture-flag
  37.         foundoriginpoly, flags = 1, 0
  38.         for j in subfaces:
  39.             try:
  40.                 flags = int(j["Contents"])
  41.             except:
  42.                 flags = 0
  43.             if not (flags & 16777216): # If just one face does not contain the Origin-texture-flag, its not an origin-poly
  44.                 foundoriginpoly=0
  45.                 break
  46.         if foundoriginpoly==1:
  47.             return ObjectOrigin(i) # give me the origin of the poly
  48.     return None
  49.  
  50. def NewXYZCube(x,y,z,tex):
  51.     p = quarkx.newobj("poly:p")
  52.     x,y,z = x*0.5, y*0.5, z*0.5
  53.  
  54.     f = quarkx.newobj("east:f");   f["v"] = (x, -x, -x, x, 128-x, -x, x, -x, 128-x)
  55.     f["tex"] = tex
  56.     p.appenditem(f)
  57.  
  58.     f = quarkx.newobj("west:f");   f["v"] = (-x, -x, -x, -x, -x, 128-x, -x, 128-x, -x)
  59.     f["tex"] = tex             ;   f["m"] = "1"
  60.     p.appenditem(f)
  61.  
  62.     f = quarkx.newobj("north:f");  f["v"] = (-y, y, -y, -y, y, 128-y, 128-y, y, -y)
  63.     f["tex"] = tex              ;  f["m"] = "1"
  64.     p.appenditem(f)
  65.  
  66.     f = quarkx.newobj("south:f");  f["v"] = (-y, -y, -y, 128-y, -y, -y, -y, -y, 128-y)
  67.     f["tex"] = tex
  68.     p.appenditem(f)
  69.  
  70.     f = quarkx.newobj("up:f");     f["v"] = (-z, -z, z, 128-z, -z, z, -z, 128-z, z)
  71.     f["tex"] = tex
  72.     p.appenditem(f)
  73.  
  74.     f = quarkx.newobj("down:f");   f["v"] = (-z, -z, -z, -z, 128-z, -z, 128-z, -z, -z)
  75.     f["tex"] = tex             ;   f["m"] = "1"
  76.     p.appenditem(f)
  77.  
  78.     return p
  79.  
  80.  
  81. def GetEntityChain(firsttargetname, list):
  82.     # Returns an ordered list of entities, which points to each other by target/targetname
  83.     newlist = []
  84.     for e in list:
  85.         if e.type == ':g':
  86.             newlist = newlist + e.findallsubitems("", ":e")
  87.             newlist = newlist + e.findallsubitems("", ":b")
  88.         else:
  89.             newlist.append(e)
  90.  
  91.     def FindEntityByTargetname(name, list):
  92.         for e in list:
  93.             if (e["targetname"] == name):
  94.                 return e, e["target"]
  95.         return None, None
  96.  
  97.     nextname = firsttargetname
  98.     namelist = []
  99.     entlist = []
  100.     ent, nextname = FindEntityByTargetname(nextname, newlist)
  101.     if (ent is not None):
  102.         entlist.append(ent)
  103.     while ((nextname is not None) and (not nextname in namelist)):
  104.         namelist.append(nextname)
  105.         ent, nextname = FindEntityByTargetname(nextname, newlist)
  106.         if (ent is not None):
  107.             entlist.append(ent)
  108.     return entlist
  109.  
  110.  
  111. def RegisterInToolbox(toolboxname, qtxfolder, obj):
  112. # FIXME - Make so ':form' also can be added somewhere.
  113.     for t in quarkx.findtoolboxes(toolboxname):
  114.         for f in t[1].subitems:
  115.             if (f.shortname == qtxfolder):
  116.                 # If object already is in toolbox, don't put it in again!
  117.                 o = f.findname(obj.name)
  118.                 if (o is None):
  119.                     print "--adding"
  120.                     f.appenditem(obj)
  121.                 return
  122.         # Did not find a qtxfolder, create one
  123.         newf = quarkx.newobj(qtxfolder+".qctx")
  124.         print "--f"
  125.         newf.appenditem(obj)
  126.         print "--folder"
  127.         t[1].parent.appenditem(newf)
  128.         print "--folderadded"
  129.         return
  130.  
  131. # ----------- REVISION HISTORY ------------
  132. #$Log: deckerutils.py,v $
  133. #Revision 1.6  2001/01/06 18:33:52  decker_dk
  134. #Use 4-spaces instead of 8-spaces 'tabs'
  135. #
  136. #Revision 1.5  2000/07/09 13:21:54  decker_dk
  137. #New function
  138. #
  139. #Revision 1.4  2000/06/03 10:25:30  alexander
  140. #added cvs headers
  141. #
  142. #Revision 1.3  2000/05/23 19:09:47  decker_dk
  143. #Removed evil hidden TAB-characters
  144. #
  145. #
  146.